<?php

namespace app\common\service;

use app\common\job\TradeExpiration;
use app\common\model\LawCase;
use app\common\model\Trade;
use app\index\traits\PaymentTrait;
use think\facade\Queue;

/**
 * Class TradeExpirationServer
 * @package app\common\service
 */
class TradeExpirationServer
{
    use PaymentTrait;

    /**
     * 订单支付过期
     * @param $id
     * @return void
     */
    public function expiration($id): void
    {
        // TODO 同步
        $trade = Trade::where('id', $id)->find();
        if (!$trade) {
            return;
        }

        // 待支付的才能取消
        if ($trade->payStatus != Trade::UNPAID) {
            return;
        }

        // 没有到过期时间
        if ($trade->payExpTime > time()) {
            // 重新插入（测试时数据可能被手动修改，这里兼容下）
            $job_data = ['id' => $trade->id];
            Queue::later($trade->payExpTime + 1, TradeExpiration::class, $job_data);
            return;
        }

        // 取消支付
        $payment = $this->getPayment($trade->payMethod);
        if ($payment) {
            $payment->cancelPay($trade);
        }

        // 取消订单
        $trade->payStatus = Trade::CANCELLED;
        $trade->save();

        // 回调订单取消事件

        if($trade->tradeType == TRADE_LAS_CASE){
            // 触发案源数量变化事件
            $lawCase = LawCase::where('id', $trade->lawCaseId)->find();
            if($lawCase){
                event('LawCaseNumUpdated', $lawCase);
            }
        }
    }

}
